﻿using UnityEngine;
using System.Collections;

/// <summary>
/// 이미지 숫자 그리기 정보.
/// </summary>
[System.Serializable]
public class wsImageNumInfo
{
	/// <summary>
	/// 이미지 숫자 정보 이름.
	/// </summary>
	public string name;
	/// <summary>
	/// 0번 이미지
	/// </summary>
	public Texture2D num0;
	/// <summary>
	/// 0번 이미지
	/// </summary>
	public Texture2D num1;
	/// <summary>
	/// 1번 이미지
	/// </summary>
	public Texture2D num2;
	/// <summary>
	/// 2번 이미지
	/// </summary>
	public Texture2D num3;
	/// <summary>
	/// 3번 이미지
	/// </summary>
	public Texture2D num4;
	/// <summary>
	/// 4번 이미지
	/// </summary>
	public Texture2D num5;
	/// <summary>
	/// 5번 이미지
	/// </summary>
	public Texture2D num6;
	/// <summary>
	/// 6번 이미지
	/// </summary>
	public Texture2D num7;
	/// <summary>
	/// 7번 이미지
	/// </summary>
	public Texture2D num8;
	/// <summary>
	/// 8번 이미지
	/// </summary>
	public Texture2D num9;
	/// <summary>
	/// 9번 이미지
	/// </summary>
	public float spaceGap = 10.0f;

	/// <summary>
	/// 숫자 하나 출력하기.
	/// </summary>
	/// <param name="num">출력할 숫자.</param>
	/// <param name="pos">출력할 위치.</param>
	void DrawNum(int num, Vector2 pos)
	{
		Texture2D find;
		switch (num)
		{
			case 0: find = num0; break;
			case 1: find = num1; break;
			case 2: find = num2; break;
			case 3: find = num3; break;
			case 4: find = num4; break;
			case 5: find = num5; break;
			case 6: find = num6; break;
			case 7: find = num7; break;
			case 8: find = num8; break;
			case 9: find = num9; break;
			default: find = num0; break;
		}
		GUI.DrawTexture(new Rect(pos.x, pos.y, find.width, find.height), find);
	}

	/// <summary>
	/// 숫자 출력하기.
	/// </summary>
	/// <param name="num">출력할 숫자</param>
	/// <param name="pos">출력할 위치</param>
	/// <param name="showDigit">출력할 자릿수</param>
	public void ShowNum(int num, Vector2 pos, int showDigit)
	{
		int digitCount = wsMath.GetDigit(num);

		// 0으로 자리수 채우기.
		if (showDigit > 1 && showDigit > digitCount)
		{
			for (int i = 0; i < (showDigit - digitCount); i++)
			{
				DrawNum(0, pos);
				pos.x += spaceGap;
			}
		}

		// 숫자에 해당하는 이미지 출력.
		for (int i = 1; i <= digitCount; i++)
		{
			int showNum = wsMath.GetNumByOrder(num, i);
			DrawNum(showNum, pos);
			pos.x += spaceGap;
		}
	}
}

/// <summary>
/// 이미지 숫자 그리기 관리자.
/// </summary>
[AddComponentMenu("wsLibrary/GUI/Image Number")]
public class wsImageNum : MonoBehaviour
{
	/// <summary>
	/// 이미지 숫자 그리기 정보 모음.
	/// </summary>
	public wsImageNumInfo[] imageNumList;

	/// <summary>
	/// 이미지 숫자 그리기
	/// </summary>
	/// <param name="name">그리기 정보 이름</param>
	/// <param name="num">출력할 숫자</param>
	/// <param name="pos">출력할 위치</param>
	public void ShowNum(string name, int num, Vector2 pos)
	{
		ShowNum(name, num, pos, 1);
	}

	/// <summary>
	/// 이미지 숫자 그리기
	/// </summary>
	/// <param name="name">그리기 정보 이름</param>
	/// <param name="num">출력할 숫자</param>
	/// <param name="pos">출력할 위치</param>
	/// <param name="showDigit">출력할 자릿수</param>
	public void ShowNum(string name, int num, Vector2 pos, int showDigit)
	{
		foreach (wsImageNumInfo info in imageNumList)
		{
			if (info.name == name)
			{
				info.ShowNum(num, pos, showDigit);
				return;
			}
		}
	}
}
